/******************************************************************************
 * Copyright (C) ShenZhen Powerdata Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳市博安达信息技术股份有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/

package com.szboanda.hbdc.gwgl.qbgl.workflow;

import com.szboanda.hbdc.workflow.dynamicform.service.IWorkflowDynamicformService;
import com.szboanda.platform.common.utils.LoggerUtil;
import com.szboanda.platform.common.utils.Toolkit;
import com.szboanda.platform.v3.workflow.event.IWorkflowListener;
import com.szboanda.platform.v3.workflow.event.WorkflowEvent;
import com.szboanda.platform.v3.workflow.exception.WorkflowException;

import java.util.HashMap;
import java.util.Map;


/**
 * @title: 公文流程-流程监听器
 * @fileName: FwspWorkflowListener.java
 * @description:
 * @copyright: PowerData Software Co.,Ltd. Rights Reserved.
 * @company: 深圳市博安达信息技术股份有限公司
 * @author: liuzz
 * @date: 2021-3-12 11:47:56
 * @version: V1.0
 */
public class QbglWorkflowListener implements IWorkflowListener {

	/**
	 *
	 */
	private static final long serialVersionUID = 2264484178631878963L;


	/**
	 *流程处理状态——处理中
	 */
	private static final int SFZF_ZF = 1;
	/**
	 *签报流程开始节点的步骤定义id
	 */
	private static final String KSBZID="3de0769f-0d04-4f1b-a96f-8cc36006c2ea";
	/**
	 *签报流程起草节点的步骤定义id
	 */
	private static final String QCBZID= "fdf0cb7d-f0d7-4563-b91b-e17afee42d8e";


	/**
	 *流程处理状态——处理中
	 */
	private static final String CLZT_JS = "JS";


	/**
	 * 流程动态表单_业务接口类
	 */
	private IWorkflowDynamicformService workflowDynamicformService;

	public QbglWorkflowListener(){
		this.workflowDynamicformService = (IWorkflowDynamicformService) Toolkit.getSpringBean("WorkflowDynamicformImpl");
	}

	/**
	 * 获取事件处理程序描述
	 */
	@Override
	public String getDescription() {
		return null;
	}
	
    /**
     * 指定的事件调用过程中，如果发生异常是否向外抛出去
     * 
     * @param eventName
     * @return
     */
	@Override
	public boolean throwException(String eventName) {
		return true;
	}
	
    /**
     * 流程创建的通知 
     * @param event 流程事件对象
     * @since V0.1.0
     */
	@Override
	public void onStart(WorkflowEvent event) {

	}

    /**i
     * 流程结束的通知
     * @param event 流程事件对象
     * @throws Exception 
     * @since V0.1.0
     */
	@Override
	public void onFinish(WorkflowEvent event) throws WorkflowException, Exception {
		LoggerUtil.info(this.getClass(), "签报流程onFinish");
		String workflowId = event.getWorkflow().getWorkflowDefinition().getFlowType();
		String businessId = event.getWorkflow().getBusiness().getBusinessId();
		String setpId = event.getStep().getDefinition().getStepId();
		Map<String, Object> model = new HashMap<String, Object>();
		if(KSBZID.equals(setpId) || QCBZID.equals(setpId)){
			model.put("SFZF", SFZF_ZF);
		}
		model.put("CLZT", CLZT_JS);
		workflowDynamicformService.updateBusiness(workflowId, businessId, model);
	}

    /**    
     * 流程发生流转时的通知
     * 可以通过WorkflowEvent对象获得流程信息getWorkflow(),当前发生流转的步骤信息getStep();
     * 也可以通过event.getStep().getChindrens()或getEventObject()获得到下一步的步骤信息
     * @param event 流程事件对象
     * @since V0.1.0
     */  
	@Override
	public void onTransition(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流转");
		

	}
    
    /**    
     * 流程发生抄送时的通知
     * @param event 流程事件对象
     * @since V0.1.0
     */  
	@Override
	public void onCopyReader(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onCopyReader");

	}

    /**    
     * 流程发生单步办结时的通知
     * @param event 流程事件对象
     * @since V0.1.0
     */  
	@Override
	public void onSingleFinish(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onSingleFinish");

	}
    
    /**
     * 流程发生删除之前的事件通知
     * @param event 流程事件对象
     * @since V0.1.0
     */
	@Override
	public void beforeDelete(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程beforeDelete");

	}
    
    /**
     * 流程发生删除后的处理
     * @param event 流程事件对象
     * @since V0.1.0
     */
	@Override
	public void onDelete(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onDelete");

	}
    
    /**
     * 流程发生回退操作
     * @param event 流程事件对象
     * @since V0.1.0
     */
	@Override
	public void onSendBack(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onSendBack");

	}
    
    /**
     * 是否流程处理是否异步调用
     * 流程引擎根据返回的值来决定同步调用或者异步调用接口中的方法实现
     * @param method 
     * @since V0.1.0
     */
	@Override
	public boolean isAsyncInvoke(String method) {
		LoggerUtil.info(this.getClass(), "公文流程isAsyncInvoke");
		return false;
	}
    
    /**
     * 流程会签时调用
     * @param event 流程事件对象
     * @author   廖声乐
     * @version  2012-10-18
     * @since    V0.1.0
     */
	@Override
	public void onCountersign(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onCountersign");

	}
    
    /**
     * 流程加签时调用
     * @param event 流程事件对象
     * @author   廖声乐
     * @version  2012-10-18
     * @since    V0.1.0
     */
	@Override
	public void onEndorse(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onEndorse");

	}
    
    /**
     * 流程会签步骤返回时调用
     * @param event 流程事件对象
     * @author   廖声乐
     * @version  2012-10-18
     * @since    V0.1.0
     */
	@Override
	public void onFeedback(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onFeedback");

	}
    
    /**
     * 流程会签步骤最后一次返回时调用
     * @param event 流程事件对象
     * @author   廖声乐
     * @version  2012-10-18
     * @since    V0.1.0
     */
	@Override
	public void onLastFeedback(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onLastFeedback");

	}
    
    /**
     * 步骤撤回时调用
     * @param event 流程事件对象
     * @author   廖声乐
     * @version  2012-10-18
     * @since    V0.1.0
     */
	@Override
	public void onRevoke(WorkflowEvent event) {
		LoggerUtil.info(this.getClass(), "公文流程onRevoke");

	}

}
